# JZ10 矩形覆盖
#
# 描述
# 我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形。
# 请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形，从同一个方向看总共有多少种不同的方法？
# 比如n=3时，2*3的矩形块有3种不同的覆盖方法(从同一个方向看)：
#
# 输入描述：
# 2*1的小矩形的总个数n
# 返回值描述：
# 覆盖一个2*n的大矩形总共有多少种不同的方法(从同一个方向看)
# 示例1
# 输入：
# 0
# 返回值：
# 0
# 示例2
# 输入：
# 1
# 返回值：
# 1
# 示例3
# 输入：
# 4
# 返回值：
# 5

# 核心代码模式
# -*- coding:utf-8 -*-
# 参照本节C++代码改来的
class Solution:
    def rectCover(self, n):
        if n <= 2: return n
        array = []
        for i in range(n + 1):
            if i <= 2:
                array.append(i)
            else:
                array.append(array[-1] + array[-2])
        return array[-1]

# Python切片操作
# a[-4] ->6 当索引只有一个数时，表示切取某一个元素。
# a[1:6] -> [1, 2, 3, 4, 5]
# 默认step=1，从左往右取值，start_index=1到end_index=6同样表示从左往右取值。
# 负数相反从右往左
